package com.cosmoplat.xikai.business.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.cosmoplat.xikai.business.domain.AgvCallbackLog;
import com.cosmoplat.xikai.business.domain.dto.agv.AgvCallbackRequest;

import java.util.List;

/**
 * @ClassName AgvService
 * @Description AGV服务类 - 负责与AGV系统进行交互，包括调用继续执行任务接口
 * @Author wdf
 * @Date 2025/9/2
 */
public interface AgvService extends IService<AgvCallbackLog> {

    /**
     * 处理AGV申请进入工作区的请求
     *
     * @param logRecord
     */
    void processApplyRequest(AgvCallbackLog logRecord);

    /**
     * 处理AGV申请离开工作区的请求
     *
     * @param logRecord
     * @param request
     */
    void processReleaseRequest(AgvCallbackLog logRecord, AgvCallbackRequest request);

    /**
     * 异步方式调度延迟执行 continueTask
     *
     * @param logRecord
     * @param reqCode     请求编号
     * @param taskCode    任务单号
     * @param delayMillis 延迟时间（毫秒）
     */
    void asyncScheduleContinueTask(AgvCallbackLog logRecord, String reqCode, String taskCode, long delayMillis);

    /**
     * 获取回调日志 - 根据请求信息
     * @param request
     * @return
     */
    AgvCallbackLog getCallBackLog(AgvCallbackRequest request);

    /**
     * 获取待处理的任务列表
     * @return
     */
    List<AgvCallbackLog> waitingTaskList();

    /**
     * 检查设备是否允许，可以继续执行任务
     * @param waitingTaskList
     */
    void checkDeviceForContinueTask(List<AgvCallbackLog> waitingTaskList);
}
